package com.mycompany.client;

import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
import com.mycompany.server.GerenciadorUsuarios;

/**
 * The client side stub for the RPC service.
 */
@RemoteServiceRelativePath("greet")
public interface GreetingService extends RemoteService {
	String greetServer(String name) throws IllegalArgumentException;
	
	/**
	 * Zera o sistema
	 */
	public void zerarSistema();
	
	/**
	 * Responsavel por encerrar o sistema
	 */
	public void encerrarSistema();
	

//	public GerenciadorUsuarios getGerenciadorUsuarios();

	
	/**
	 * Responsavel por aprovar amizade entre dois usuarios
	 * @param idSessao Sessao do usuario 
	 * @param login Login do usuario
	 * @throws Exception Caso idSessao ou login sejam invalidos
	 */
	public void aprovarAmizade(String idSessao, String login) throws Exception;
	
	/**
	 * Responsavel pelas requisicoes de amizade entre dois usuarios
	 * @param idSessao IdSessao do usuario
	 * @return IdRequisicao de amizade
	 * @throws Exception Caso a idSessao seja invalida
	 */
	public String getRequisicoesDeAmizade(String idSessao) throws Exception;
	/**
	 * Responsavel por verificar se dois usuarios sao amigos
	 * @param idSessao IdSessao do usuario
	 * @param login Login do usuario
	 * @return true se forem amigos ou false caso contrario
	 * @throws Exception Caso idSessao ou login sejam invalidos
	 */
	public String ehAmigo(String idSessao, String login) throws Exception;
	/**
	 * Responsavel por requisitar amizade entre dois usuarios
	 * @param idSessao IdSessao do usuario
	 * @param login Login do usuario
	 * @throws Exception Caso idSessao ou login sejam invalidos
	 */
	public void requisitarAmizade(String idSessao, String login)
			throws Exception;

	public String localizarUsuario(String idSessao, String chave, String atributo) throws Exception;
	
	public String localizarUsuario(String idSessao)throws Exception;

	public String getAtributoItem(String idItem, String atributo)throws Exception;

	public String cadastrarItem(String idSessao, String nome, String descricao, String categoria) throws Exception;

	public void criarUsuario(String login, String nome, String endereco)throws Exception;

	public String abrirSessao(String login) throws Exception;

	public String getAtributoUsuario(String login, String atributo) throws Exception;
	
	public String getAmigos(String idSessao) throws Exception;

	public String getAmigos(String idSessao, String login) throws Exception;

	public String getItens(String idSessao) throws Exception;

	public String getItens(String idSessao, String login) throws Exception;
	
	public String requisitarEmprestimo(String idSessao, String idItem, int dias) throws Exception;
	
	public String getEmprestimos(String idSessao, String tipo)throws Exception;
	
	public String aprovarEmprestimo(String idSessao, String idRequisicaoEmprestimo)throws Exception;
	
	
	public void devolverItem(String idSessao, String idEmprestimo) throws Exception;
	
	public void confirmarTerminoEmprestimo(String idSessao, String idEmprestimo) throws Exception;
	
	public String enviarMensagem (String idSessao, String destinatario, String assunto, String mensagem) throws Exception;
	
	public String enviarMensagem (String idSessao, String destinatario, String assunto, String mensagem, String idRequisicaoEmprestimo) throws Exception;
	
	public String lerTopicos (String idSessao, String tipo) throws Exception;
	
	public String lerMensagens (String idSessao, String idTopico) throws Exception;
	
	public void requisitarDevolucao(String idSessao, String idEmprestimo) throws Exception;
		
	public void adicionarDias(int dias);
	
	public void registrarInteresse(String idSessao, String idItem) throws Exception;
	
	public String pesquisarItem (String idSessao, String chave, String atributo, String tipoOrdenacao, String criterioOrdenacao) throws Exception;
	
	public void desfazerAmizade (String idSessao, String loginAmigo) throws Exception; 
	
	public void apagarItem (String idSessao, String idItem) throws Exception;
	
	public String getRanking(String idSessao, String categoria) throws Exception;
	
	public String historicoAtividades(String idSessao) throws Exception;
	
	public String historicoAtividadesConjunto(String idSessao) throws Exception;
	
	public String publicarPedido (String idSessao, String nomeItem, String descricaoItem) throws Exception;
	
	public void oferecerItem (String idSessao, String idPublicacaoPedido, String idItem) throws Exception;
	
	public void rePublicarPedido (String idSessao, String idPublicacaoPedido) throws Exception;
}
